
package com.qdu.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
//定义一个方面类，包含次要业务逻辑
@Component
@Aspect 
public class LogAspect {
    
    //声明一个切入点
    @Pointcut("execution(* com.qdu.dao.*.*(..))") 
    private void logPointcut(){}
    
    //定义一个异常后通知: 一个方法出现异常退出的时候执行的通知
    //如果需要获取发生的异常信息,请在方法中添加一个参数用于接收异常对象
    //所有的异常类都直接或间接实现了Throwable接口,Throwable表示所有异常
    //throwing指定接收异常对象的参数的名,这里ex参数负责接收异常对象
    @AfterThrowing(value="logPointcut()",throwing = "ex")
    public void logAfterThrowing(JoinPoint p,Throwable ex){
        System.out.println("发生了异常,发生异常的方法:"
                +p.getSignature().getName()+",异常消息:"+ex.getMessage());
    }
}
